package Controlador;

import java.io.FileReader;
import java.util.Enumeration;
import java.util.Hashtable;

import modelo.Colisionable;
import modelo.Contenedor;
import modelo.Posicion;
import modelo.Vector;
import modelo.bonus.*;
import modelo.estatico.Cuartel;
import modelo.estatico.Estatico;
import modelo.estatico.pared.ParedDeConcreto;
import modelo.estatico.pared.ParedMetalica;
import modelo.proyectil.Bala;
import modelo.proyectil.BalaCanion;
import modelo.proyectil.Cohete;
import modelo.tanque.AlgoTank;
import modelo.tanque.GrizzlyBattleTank;
import modelo.tanque.IFV;
import modelo.tanque.MirageTank;
import vista.bonus.VistaBonusVelocidad;
import vista.bonus.VistaBonusVida;
import vista.cuartel.VistaCuartel;
import vista.pared.VistaParedDeConcreto;
import vista.pared.VistaParedMetalica;
import vista.proyectil.VistaBala;
import vista.proyectil.VistaBalaCanion;
import vista.proyectil.VistaCohete;
import vista.tanque.VistaAlgoTank;
import vista.tanque.VistaGrizzlyBattleTank;
import vista.tanque.VistaIFV;
import vista.tanque.VistaMirageTank;
import XMLparser.DocHandler;
import XMLparser.QDParser;
import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.Posicionable;

public class LectorXML implements DocHandler {

	// We only instantiate one copy of the DocHandler
	static LectorXML lectorXML = new LectorXML();

	// Implementation of DocHandler is below this line
	public void startDocument() {
		//System.out.println("  start document");
	}

	public void endDocument() {
		//System.out.println("  end document");
	}

	public void startElement(String elem, Hashtable h) {
		String key;
		String val;
		Enumeration e = h.keys();
		Posicionable posicionable;
		while (e.hasMoreElements()) {
			key = (String) e.nextElement();
			val = (String) h.get(key);
			if (key.equalsIgnoreCase("Tipo")) {
				if(val.equalsIgnoreCase("AlgoTank")){
					AlgoTank.leer(e, h);				
				} else if(val.equalsIgnoreCase("GrizzlyBattleTank")){
					GrizzlyBattleTank.leer(e, h);				
				} else if(val.equalsIgnoreCase("IFV")){
					IFV.leer(e, h);				
				} else if(val.equalsIgnoreCase("MirageTank")){
					MirageTank.leer(e, h);				
				} else if(val.equalsIgnoreCase("Bala")){
					Bala.leer(e, h);				
				} else if(val.equalsIgnoreCase("BalaCanion")){
					BalaCanion.leer(e, h);				
				} else if(val.equalsIgnoreCase("Cohete")){
					Cohete.leer(e, h);				
				} else if(val.equalsIgnoreCase("ParedDeConcreto")){
					ParedDeConcreto.leer(e, h);				
				} else if(val.equalsIgnoreCase("ParedMetalica")){
					ParedMetalica.leer(e, h);				
				} else if(val.equalsIgnoreCase("Cuartel")){
					Cuartel.leer(e, h);				
				}
			}
		}
	}

	public void endElement(String elem) {
	}

	public void text(String text) {
	}

	public static void correr(String archiv) throws Exception {
		Contenedor.getInstance().getControlador().detenerJuego();
		Contenedor.getInstance().vaciar();
		Contenedor.getInstance().getControlador().dibujar();
		reportOnFile(archiv);
		Contenedor.getInstance().getControlador().dibujar();
		Contenedor.getInstance().getControlador().restartJuergo();
	}

	public static void reportOnFile(String file) throws Exception {
		//System.out.println("===============================");
		//System.out.println("file: " + file);

		// This is all the code we need to parse
		// a document with our DocHandler.
		FileReader fr = new FileReader(file);
		QDParser.parse(lectorXML, fr);

		fr.close();
	}
}
